Спринт 1/18 → Тема 7/13: Множества set() → Урок 1/1
Тип Set: множества
Множество (set) в Python — это изменяемая неупорядоченная коллекция неизменяемых и уникальных объектов.
- Можно добавлять элементы в множество и удалять их:
set— изменяемая коллекция.
Если насыпать горсть пшеницы в плошку — можно высыпать часть зёрен, а можно добавить сколько угодно (в отличие от плошки, элементы вsetне посыпятся через край). - Множество — неупорядоченная коллекция, к элементам нельзя обратиться по индексам или автоматически вывести их по порядку.
Какое из зёрен в плошке будет первым, а какое — последним? Да никакое! Обратиться к зёрнам по индексам не получится. - Изменить отдельный элемент в множестве нельзя: элементами множества могут быть только неизменяемые объекты (числа, строки, кортежи и прочие хешируемые объекты).
Изменить зерно невозможно, ячмень не может стать пшеном. - Элементы множества должны быть уникальны. Добавить в множество элемент со значением, которое уже есть в этом множестве, не получится; однако и ошибки это не вызовет.
Нет двух одинаковых зёрен; каждое из них уникально.
Неупорядоченные коллекции хранят элементы так, что невозможно определить, какой элемент первый, какой последний, а какой, к примеру, восьмой. Даже при выводе в цикле неупорядоченная коллекция будет возвращать свои элементы в разном порядке.
Литерал для множеств — фигурные скобки.
Запустите код несколько раз: как и положено детским игрушкам, из ящика они вываливаются беспорядочной грудой, каждый раз по-разному.
КодPYTHON
Множества — это коллекции: они содержат набор элементов. Однако множества — это не последовательности: элементы множества нельзя перебрать «по очереди», порядок будет всегда разный; а последовательностями называют упорядоченные коллекции.
Из особенностей множеств можно выделить:
- удобство исключения дубликатов, например, при добавлении элементов к множеству;
- возможность выполнения математических операций над множествами — вычисление пересечения и разности множеств.
Создание объекта set
Как и другие коллекции, создать множество можно через литералы или через встроенную функцию.
PYTHON
Создать пустое множество можно только через функцию
set(); объявить пустое множество литерально не получится: будет создан пустой словарь, а не пустое множество.PYTHON
Уникальность элементов множества
Все элементы множества уникальны; при добавлении неуникальных элементов они не будут включены в множество.
Попрактикуемся на списке фильмов из онлайн-кинотеатра: иногда в нём попадаются повторяющиеся элементы. Чтобы при дальнейшей обработке данных о фильмах дублирование не привело к ошибке, можно исключить дубли, преобразовав список в множество.
PYTHON
Найдите количество уникальных символов в строке, без учёта пробелов.
КодPYTHON
Элемент множества — хешируемый объект
Элементом множества не могут быть данные изменяемых типов, например — списки.
PYTHON
Функция
set() создаст множество из списка или словаря:- множество, созданное из словаря, будет содержать только ключи исходного словаря; ключи словаря — всегда неизменяемые объекты, потому проблем не возникнет;
- из списка множество будет создано лишь в том случае, если элементы списка — неизменяемые объекты.
PYTHON
Работа с множествами
Рассмотрим работу с множествами на примере игрушек Максима и Леры:
PYTHON
Принадлежность объекта множеству
Чтобы определить, есть ли нужный элемент в множестве, применяют оператор
in. Он работает так же, как и для последовательностей, но поиск выполняется гораздо быстрее, чем в списках — это связано с особенностью хранения множеств в памяти.Проведём поиск в списке и в множестве; в каждой коллекции создадим по миллиону элементов.
Чтобы засечь время выполнения операции, импортируем в код встроенный модуль
time.КодPYTHON
Поиск по списку выполняется быстро, но поиск в множестве — заметно быстрее.
Поиск по хешируемым объектам происходит почти мгновенно. Преобразование из списка в множество может занимать много времени, но если требуется выполнить поиск по коллекции больше двух раз — будет выгоднее потратить время на преобразование и затем искать по множеству.
Добавление элемента
Для добавления элемента в множество применяют метод
add(). Он очень похож на метод списков append(); если добавляемый элемент уже есть в множестве — ничего не произойдёт, множество не изменится.PYTHON
Удаление элемента множества
Для удаления элемента есть три метода:
remove(), discard() и pop().Методы
remove() и discard() очень схожи: они удаляют элемент из множества. При попытке удалить несуществующий элемент методом remove() программа завершится с ошибкой.PYTHON
Метод
pop() удаляет и возвращает случайный элемент множества. Для жеребьевки отличный вариант, результат предугадать нельзя.КодPYTHON
Очистка множества
Для очистки существующего множества есть метод
сlear():PYTHON
Операции над множествами
Ключевое отличие множеств от других коллекций — возможность выполнять над множествами математические операции.
Пересечение
Поиск «пересечения» (поиск совпадающих элементов) двух коллекций — востребованная операция в программировании: например, пересечением можно найти одинаковые почтовые адреса в двух базах данных или одинаковые товары в интернет-магазинах. Можно сравнить коллекции в цикле, определяя наличие элемента через
in, но это ресурсоёмко и долго. Для поиска пересечения двух множеств есть оператор
& (логическое И), он возвращает новое множество, в котором будут собраны элементы, одновременно присутствующие в обоих исходных множествах:PYTHON
Получить пересечение множеств можно и другим способом: для этого есть метод
intersection():PYTHON
С помощью этого метода можно получить пересечение множества с любым итерируемым объектом, все элементы которого — хешируемые объекты (например — со списком, элементы которого — числа или строки).
Это справедливо и для других методов множеств: в аргументы этих методов можно передать любой итерируемый объект с хешируемыми элементами.
Объединение
В результате объединения двух множеств (операция «логическое
ИЛИ») будет создано новое множество, содержащее все элементы исходных. Логическое ИЛИ обозначается операндом |.PYTHON
Другой способ объединить два множества — применить метод
union().PYTHON
Разность
Разность множеств возвращает новое множество, в которое войдут элементы первого множества, не пересекающиеся с элементами второго. Оператор для поиска разности — обычный минус
-.PYTHON
Разность можно найти и методом
difference():PYTHON
Симметрическая разность
Симметрической разностью двух множеств будет третье множество, каждый элемент которого принадлежит либо первому, либо второму множеству, но не их пересечению.
Для поиска симметрической разности применяют символ «карет»
^:PYTHON
Симметрическую разность можно найти и с помощью метода
symmetric_difference()PYTHON
Методов работы с множествами больше, полный список можно найти в официальной документации.
Методов работы с множествами больше, полный список можно найти в официальной документации. А основная информация из этого урока собрана в шпаргалке.
Вычислите и напечатайте количество одинаковых элементов в коллекциях
num_string_1 и num_string_2.КодPYTHON
Антон получил в ответ от сервера перечень ID клиентов в виде строки, где ID разделены пробелами. Его задача — удалить дубликаты и отсортировать список ID по возрастанию.
Напишите программу, которая поможет Антону формировать такие списки. Если в списке будет найден дублирующийся ID — программа должна вывести в терминал сообщение «Найден дубликат ID
<значение_id>».КодPYTHON